//#include <iostream>
//
//using namespace std;
//
//int main(int argc, char* argv[])
//{
//	int n;
//	cin>>n;
//	int v = 0;
//	const int length = 1000001;
//	char origin[length];
//	
//	while (v < n)
//	{
//		int i = 0;		
//		int j = 0;
//		for (; j < length; j++) 
//			origin[j] = 0;
//		cin>>origin;
//		
//		memset(origin, 11, length - 1);
//
//		for (j = 0; j < length; j++) {
//			if (origin[j] == 0)
//				break;
//		}
//
//		int len = j;
//
//		int codeLength = len * 8 + 1;
//		int *code = new int[codeLength];
//		int codecLength = len * 4 + 1;
//		char *codec = new char[codecLength];
//
//		int size = 0;
//		int radix = 2;
//		for (j = 0; j < len; j++) {
//			if (origin[j] == 0)
//				break;			
//			int ascii = origin[j];
//			size += 8;
//			int tempSize = 1;
//			while (tempSize <= 8) {				
//				code[size - tempSize] = ascii % 2;
//				ascii = (ascii - code[size - tempSize]) / 2;
//				++tempSize;
//			}	
//		}
//		
//		for (i = 0; i < codecLength; i++) {
//			codec[i] = 0;
//		}
//		int codecSize = 0;
//		for (i = 0; i < size; i += 2) {
//			if (code[i] == 0 && code[i + 1] == 0) {
//				codec[codecSize] = 'a';
//			} else if (code[i] == 0 && code[i + 1] == 1) {
//				codec[codecSize] = 'o';
//			} else if (code[i] == 1 && code[i + 1] == 0) {
//				codec[codecSize] = 'd';
//			} else if (code[i] == 1 && code[i + 1] == 1) {
//				codec[codecSize] = ' ';
//			}
//			++codecSize;
//		}
//
//		char *dao = "dao";
//		i = 0;
//		int number = 0;
//
//		while(i < codecSize - 2) {
//			if (codec[i] == dao[0] &&
//				codec[i + 1] == dao[1] &&
//				codec[i + 2] == dao[2]) {
//				number++;
//				i += 3;
//			} else if (codec[i + 2] == dao[2]) {
//				i += 3;
//			} else if (codec[i + 1] == dao[1]) {
//				i += 2;
//			} else if (codec[i] == dao[0]) {
//				++i;
//			} else {
//				++i;
//			}
//		}
//
//		/*int *f = new int[3];
//		f[0] = -1;
//
//		for (j = 1; j < codecSize; j++) {
//			int u = f[j - 1];
//			while (codec[j] != codec[u + 1] && u >= 0) 
//				u = f[u];
//			if (codec[j] == codec[u + 1])
//				f[j] = u + 1;
//			else
//				f[j] = -1;
//		}
//
//		i = 0;
//		j = 0;
//
//		while (i < codecSize) {
//			bool isEqual = true;
//			for (j = 0; j < 3; j++) {
//				if (i >= codecSize) {
//					isEqual = false;
//					break;
//				}
//				if (codec[i] == dao[j]) {
//					j++;
//					i++;
//				} else if (j == 0) {
//					i++;
//					isEqual = false;
//					break;
//				} else {
//					i = f[i - 1] + 1;
//					isEqual = false;
//					break;
//				}
//			}
//			if (isEqual) 
//				number++;
//		}*/
//
//		delete[] code;
//		delete[] codec;
//		//delete[] f;
//		cout<<number<<endl;	
//		++v;
//	}
//	return 0;
//}

//#include <iostream>
//
//using namespace std;
//
//int main(int argc, char* argv[])
//{
//	int T;
//	cin>>T;
//	int v = 0;
//	while (v < T)
//	{
//		int n, m;
//		cin>>n>>m;
//		double fz = 0.0;
//		int fm = 0;
//
//		double ai;
//
//		int bi;
//		int i = 0;
//		double minAi = 1000.0;
//		for (i = 0; i < n; i++) {
//			cin>>ai>>bi;
//			fz += (ai * bi);
//			fm += bi;
//			if (ai < minAi) 
//				minAi = ai;
//		}
//
//		double ave = fz / fm;
//		int number = 0;
//		bool find = false;
//		double *aiA = new double[m];
//		int *biA = new int[m];
//		for (i = 0; i < m; i++) {
//			cin>>ai>>bi;
//			aiA[i] = ai;
//			biA[i] = bi;
//			/*if (fz > fm * ai && !find) {
//				ave = (fz + ai * bi) / (fm + bi);
//				if (ave >= 90)
//					find = true;
//			}*/
//
//		} 
//		while (ave < 90) {
//			double max = -1;
//			int maxIdx = -1;
//			for (i = 0; i < m; i++) {
//				/*if (aiA[i] > max && aiA[i] > minAi) {
//					max = aiA[i];
//					maxIdx = i;
//				}*/
//				if (aiA[i] != -1) {
//					double va = (fm * aiA[i] - fz) / ((fm / biA[i] + 1) * fm);
//					if ( va > max) {
//						max = va;
//						maxIdx = i;
//					}
//				}
//			}
//			if (maxIdx == -1) 
//				break;
//			fz += (aiA[maxIdx] * biA[maxIdx]);
//			fm += biA[maxIdx];
//			ave = fz / fm;
//			aiA[maxIdx] = -1;
//			number++;
//		}
//
//		if (ave < 90)
//			cout<<"Impossible"<<endl;
//		else 
//			cout<<number<<endl;
//		//if (find)
//		//	cout
//
//		++v;
//	}
//	return 0;
//}

#include <iostream>
#include <string>

using namespace std;



int main(int argc, char* argv[])
{
	int N;
	cin>>N;
	string s;
	cin>>s;

	int i = 0, j = s.size() - 1;
	const int mod = 10000;
	bool *f = new bool[s.size()];
	for (i = 0; i < (int)s.size(); i++) {
		f[i] = false;
	}
	int remainder = 1;

	/*while (true) {
		char minC = 'z';
		int minIdx = -1;
		for (i = 0; i < (int)s.size(); i++) {
			if (!f[i]) {
				if (s[i] <= minC) {
					minC = s[i];
					minIdx = i;
				}
			}
		}
		if (minIdx == -1) {
			cout<<remainder<<endl;
			break;
		} else {
			f[minIdx] = f[s.size() - 1 - minIdx] = true;
			remainder = ((minC - 'a' + 1) * remainder) % mod;
		}
	}*/
	i = 0; 
	j = s.size() - 1;
	while (i > j)
	{
		int min = (s[i] - 'a' + 1) > (s[j] - 'a' + 1) ? (s[j] - 'a' + 1) : (s[i] - 'a' + 1);
		int remainder1 = 1;
		for (int k = 0; k < (int)(s.size() - 2 * (i + 1)); k++) {
			remainder1 = (remainder1 * 26 ) % mod;
		}
		++i;
		--j;
	}
	

	
	/*int T;
	cin>>T;
	int v = 0;
	while (v < T)
	{
		int N, M;
		cin>>N>>M;


		--v;
	}*/

	return 0;
}